package 多线程初阶1;
//多线程带来的风险-线程安全(重点)
//详见线程2-TestDemo8
//啥叫线程安全问题?线程不安全的原因是啥? 也是经典面试题[一定要重点掌握],
// 以及线程和进程的区别,创建一个线程有几种方式,线程里面的Thread.run有啥区别
//难且工作中常用
/**
 * 多线程:
 * 1.线程的基本概念,线程和进程的区别
 * 2.Thread的基本用法
 * 3.线程的状态
 * 4.线程安全
 *
 * 不安全原因:
 * a)抢占式执行 -- 内核实现,没办法
 * b)两个线程修改了同一变量. -- 看场景
 * c)原子性 -- 真正靠谱的方法
 * d)内存可见性(编译器优化相关)
 * e)指令重排序(也是和编译器优化相关)
 */
//e)指令重排序:编译器会自动调整执行指令的顺序,以达到提高执行效率的效果
//    调整的前提是,保证指令的最终效果是不变的~
//    (编译器优化,是一个非常智能的东西.哪怕程序员代码写的很挫.
//    但是编译器咔咔一一顿优化,代码效率还是会挺高的)

/**
 * 对于保证指令的最终效果是不变的.
 * 如果当前的逻辑只是在单线程下运行,编译器判定顺序是否影响结果就很容易.
 * 但如果当前的逻辑是在多线程下运行,那么编译器判定顺序是否影响结果,就可能出错.
 *
 */
// 注:编译器优化和不优化,效率可能差很多(倍)
    //解决线程不安全的方法,最普适的是 通过"原子性"这样的店切入点来解决问题
//    synchronized 一定要拼写,会读


public class TestDemo1 {

}
